JupyterLab le couteau suisse prêt à porter
¶

K.I.A.Derouiche

Juillet 10, 2021 SICOM2021

Alger, Algerie

About me¶

  • Architect R&D at ADGON Solutions
  • GitHub

Contact¶

  • @kiaderouiche
  • Email

Agenda¶

I - IPython, notebook, Jupyter

II - JupyterLab, pourquoi ?

III - Mon utilisation de Jupyter Lab (et Jupyter Notebook)

Questions? .¶

  • Qui a déjà entendu parler de ipython ?, Et Qui a déjà utilisé ipython ?
  • Qui a déjà entendu parler de Jupyter Notebook ?, Et Qui a déjà utilisé Jupyter Notebook ?
  • Qui a déjà entendu parler de Jupyter Lab ?, Et Qui a déjà utilisé Jupyter Lab ?

Avertissement¶

  • Je ne suis pas un core développeur, ni des extensions.
  • Je vais donc essayer d'être clair, précis et concis, D'ailleurs, si certains remarquent des erreurs ou approximations, n'hésitez pas à m'en faire part.

Au debut il y eut IPython¶

Qui utilisent Jupyter

Le premier développeur !¶

Créé par F Perez (chercheur au Berkeley Institute for Data Science) en 2001. Presque 20 ans !

Qui utilisent Jupyter

IPython un shell python évolué¶

On y trouve des petites surprises qui manquent à l'interpréteur python livré par défaut. En particulier, on a :

  • coloration syntaxique
  • autocompletation
  • historiques des saisies et des résultats
  • commandes systèmes
  • aide en ligne
  • commandes utiles propres (%magics)
  • intégration à la boucle d'évènement de divers toolkits graphiques(qt, gtk, wx)
  • pylab

Edition et évaluation de code python¶

Avec complétation automatique et coloration syntaxique.

IPython affiche le résultat de la derniére expression évaluée si elle ne vaut pas None

Les fonctions magiques et propres à IPython¶

  • commence avec % et %%
  • %quickref pour avoir tout les commandes
  • %lsmagic lister tous les commandes magiques

Available line magics: %alias %alias_magic %autocall %autoindent %automagic %bookmark %cat %cd %clear %colors %config %cp %cpaste %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %paste %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %profile %prun %psearch %psource %pushd %pwd %pycat %pylab %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %rm %rmdir %run %save %sc %set_env %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode

Available cell magics: %%! %%HTML %%SVG %%bash %%capture %%debug %%file %%html %%javascript %%js %%latex %%markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile

Automagic is ON, % prefix IS NOT needed for line magics.

En lançant la commande IPython on travaille directement avec IPython, via stdin, stdout et stderr. Outer l'économie de ressources, cela permet de l'utiliser comme un shell systéme

Session IPython¶

  • Demarrer le logging de la session: %logstart
  • Etat de la session: %logstate
  • Stoppé une session: %logoff
  • Historique de la session: %history #or %hist
In [9]:
# Mesurer le temps d'exécution
S = [x**2 for x in range(10)]
%timeit M = [x for x in S if x % 2 == 0]
891 ns ± 31.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Interaction avec le shell GNU/Linux et Unix/BSD¶

La commande shell commence par un point d'exclamation (!). Est la ligne est passé au shell du système

In [ ]:
# avec la commande **!**
In [3]: ! du -h /etc

Documentation en ligne¶

IPython propose une alternative commode à la commande help() de python avec la syntaxe ? On peut même consulter le code source (si présent) avec ??

In [11]:
import io
io.BytesIO?
Init signature: io.BytesIO(initial_bytes=b'')
Docstring:      Buffered I/O implementation using an in-memory bytes buffer.
Type:           type

IPython Architecture¶

Jupyter process

Puis vint le notebook¶

Qu'entend-on par notebook ?

  • un document JSON, fait de cellules (code, texte, images, ...),
  • une application web qui permet de visualiser les notebooks dans un navigateur et d'interagir ce document, en uilisant ipython pour interpréter le code.

Premiére apparition du notebook dans le projet ipython (version 0.12, en 2009).

Qu'est ce que en trouve dans un notebook:¶

  • mettre en forme du texte avec markdown(et HTML)
  • insérer des formules mathématiques avec LaTeX
  • insérer et exécuter du code Python
  • insérer des images, vidéos
  • capturer les sorties matplotlib
  • plus encore...

Rien n'empêche d'utiliser le Jupyter avec d'autres langages...¶

IPython Kernel supporte plus de 50 langage de programmation utiliser et mélanger dans une même interface: Python, R, JavaScript, Ruby, Perl, C, Julia, Fortran, Matlab ou Mathematica, SQLite et SQL... Il y en a pour tous les goûts !

https://github.com/jupyter/jupyter/wiki/Jupyter-kernels

Réprésentation integration des objets riches¶

IPython offre la possiblité aux objets Python de définir des représentations autres que le simple

texte implementant des alternatives __repr__ (représentation d'un objet en mode ascii):

  • HTML (_reprhtml)
  • JSON (_reprjson)
  • PNG (_reprpng)
  • JPEG (_reprjpeg)
  • SVG (_reprsvg)
  • LaTeX (_reprlatex)

Vite vite...Jupyter !
¶

Jupyter process

I.3 Jupyter¶

En 2014, naissance du projet Jupyter : le notebook ne fait plus partie d'IPython. C'est là que l'outil s'est démocratisé : "La cellule".

  • Le du projet Jupyter (le nom est la contraction de Julia, Python, R ; ça montre que l'on peut utiliser plusieurs langages).

Le projet Jupyter¶

En 2014, le projet ipython à été divsé en :

  • séparation du notebook d'avec ipython : naissance du projet Jupyter
  • Jupyter(notebook, console, qtconsole) - les interfaces
  • ipython(ipykernel) - le backend python
  • ipywidgets - éléments d'interfaces utilsateurs
  • ipyparalléle - framework d'exécution paralléle
  • traitlets - système de conf commun

Architecture de Jupyter¶

Cependant, la commande jupyter console:

  • lance deux processus: le noyau IPython + la console Jupyter(défaut)
  • ou permet de se connecter à un noyau existant, eventuellement distant(via ssh ou direct)

plusieurs consoles Jupyter peuvent partager le meme noyau, En lançant la commande ipython on travaille directement avec IPython, via stdin, stdout et stderr.

Outre l'économie de ressources, cela permet de l'utiliser comme un shell système

Jupyter process

JupyterLab pourquoi ?¶

II.1 Besoins et motivations ?¶

II.2 Nouvelle interface, nouvelles fonctionnalités¶

II.3 Nouvelle façon d'intégrer des plugins¶

JupyterLab process

L'installation d'IPython, jupyter et jupyterlab¶

Trois méthodes d'installations:

  • installation de paquets via les distributions.
  • Utilisation de l'environement virtualenv via pip:
    • \$ pip install --user virtualenv
    • \$ virtualenv /path/vers/projet/env_nom_du_projet
    • \$ source /path/vers/projet/env_nom_du_projet/bin/activate
  • https://www.anaconda.com/ : Anaconda est une distribution open source pour des programmation Python et R permet de faire du traitement de données à grande échelle, l'analyse prédictive et l'informatique scientifique, visant à simplifier la gestion et le déploiement des paquets scientifique Python gérées par le système de gestion de paquets conda. un seul installeur pour tous les paquets Python scientifique,

II.1 Besoins et motivations ?¶

  • faire un jupyter notebook amélioré,
  • faciliter l'ajout d'extension,
  • utiliser des technos plus récentes,
  • simplifier/améliorer plein de choses dans l'arrière boutique.
  • Aller plus loin: (https://www.youtube.com/watch?v=w7jq4XgwLJQ&t=105)

Jupyter Lab est développé pour remplacer, l'application web Jupyter Notebook. Il y a plusieurs motivations derrière ça.

  • faire un jupyter notebook amélioré :
    • l'idée reste de garder les mêmes briques qui ont fait le succès de jupyter notebook (l'interaction avec les notebooks, l'accès à un terminal, à une console, à un éditeur de texte, ...)
    • plus facilement interagir avec ces briques de base,
    • améliorer le design,
  • faciliter l'ajout d'extensions (je ne sais pas si c'est plus simple à développer, mais c'est au moins plus extensible, le champ des possibles est plus large),
  • utiliser des technos plus récentes (npm, typescript, ...),
  • faire les choses plus proprement en arrière boutique (mais là je ne suis pas suffisamment expert pour comprendre et expliquer de quoi il en retourne précisément)

Histore du projet¶

2015 (?) : Début du développement.

Début 2018 : arrivée de JupyterLab en version bêta.

été 2019 : JupyterLab v1.0.0, première version stable.

Un peu de publicité¶

Qui utilisent Jupyter

Le développement a commencé en 2015 (environ, je ne suis pas aller chercher précisément).

En février 2018, JupyterLab est prêt à être utilisé en version bêta. (en lien, l'article de blog en faisant l'annonce.)

Il y a quelques mois, fin juin 2019, on a vu la version 1.0 de JupyterLab arriver. (en lien, la release github de la version 1.0 ; apparemment, ce n'était pas un accomplissement suffisant pour en faire une promo un peu plus grande ; je dois avouer que j'ai trouvé ça assez étonnant...). On en est à la version 1.2, une version 2.0 est prévue pour janvier.

(skip) (Il faut espérer qu'ils réussissent à mieux tenir les délais, dans la vidéo dans le premier lien, qui date d'août 2017, ils espèrent une bêta dans les mois qui viennent, et une version stable pour fin 2017...)

Démarrage et organisation de l'interface¶

Démonstration

  • lancement du serveur;
  • présentation de l'interface home;
  • ouverture et création d'un notebook;
  • changer le titre;
  • notion de cellule et markdown;
  • illustration complétation et documentation du notebook;
  • purger les sorties;
  • déplacer les cellules;
  • racourcis clavier.

A quoi ressemble JupyterLab ?

Vous avez un menu en haut, un panneau latéral (qu'on peut déplier/replier) sur le côté, et un espace de travail, qui est modulable et qui peut contenir plusieurs onglets.

On a d'ailleurs deux kernels python, python 2 et python 3. Mais plus personne n'utilise python 2.

II. 2 Nouvelle interface, nouvelles fonctionnalités¶

La bare du Menu¶

Regardons un peu plus en détail la barre de menu. J'avoue ne plus trop avoir besoin d'y faire un tour (parce que je connais les raccourcis usuels, qui sont bien pratiques et souvent bien trouvés).

File¶

Dans l'onglet File :

  • nouveau fichier, nouvelle console
  • sauvegarder, renommer le notebook ;
  • fermer l'onglet, tous les onglets,
  • éteindre le notebook,
  • exporter en un autre format (LateX, pdf, rst, md, html, slides, script),
  • on peut fermer la session et fermer JupyterLab,
  • pas encore eu l'occasion de rechager le notebook depuis le disque ou de le remettre dans l'état d'un point de sauvegarde précédent, mais ça doit être utile !
  • il y a même une fonction imprimer.
Edit¶

Dans l'onglet Edit, on trouve tout ce qui concerne l'édition de cellules :

  • undo, redo ;
  • copier, couper, coller, supprimer ;
  • déplacer les cellules sélectionnées ;
  • séparer une cellule en deux ou réunir deux cellules;
  • supprimer les sorties ;
  • trouver, aller au précédent et au suivant.

View/Affichage¶

Dans l'onglet View, on peut choisir des options visuelles, comme :

  • montrer ou cacher le bandeau latéral,
  • montrer la barre de statut en bas,
  • montrer le numéro de ligne,
  • étendre ou réduire les cellules,
  • mode présentation (plus grande police d'écriture),
  • choisir un thème (par défaut : clair ou sombre)

Run/Cellule¶

Dans l'onglet Run, on trouve tout ce qu'on veut pour lancer un noteook :

  • lancer la ou les cellule(s) sélectionnée(s),
  • lancer toutes celles au-dessus,
  • lancer à partir de celle-ci et toutes celles en-dessous,
  • toutes les cellules,
  • relancer le kernel avant de lancer toutes des cellules

On peut aussi :

  • lancer le code inséré dans du texte dans une console,
  • faire le rendu des cellules Markdown

Cellules¶

Dans ces cellules on peut saisir du texte aves des balises de lise en forme:

  • Markdown
  • HTML
  • LaTeX -...

Réduire / Déplacer les cellules¶

En cliquant sur la barre bleue à gauche, on peut réduire la taille de la cellule, et ça peut vraiment être pratique.

On peut le faire sur une cellule markdown, mais aussi sur l'entrée ou la sortie d'une cellule de code

Ca peut aussi être utile. Personnellement, je préfère ne pas avoir à toucher ma souris pour ça, et j'utilise plutôt les raccourcis claviers :

  • "X" pour couper,
  • "V" pour coller,
  • "C" pour copier,
  • "D, D" pour supprimer,
  • "A" pour créer une cellule au-dessus,
  • "B" pour créer une cellule en-dessous,
  • "M" pour transformer en markdown,
  • "Y" pour les fois où je suis allé trop vite et ai mis une cellule en mode markdown

Système de fichiers¶

Il y avait déjà un onglet pour ça dans Jupyter Notebook, mais je trouve ça vraiment plus pratique ici (parce qu'on peut garder notre espace de travail sur le côté).

On a facilement accès à :

  • la création d'un nouvel onglet (notebook, console, terminal, ...), (ici, je commence par créer un notebook)
  • la création d'un nouveau dossier (on peut aussi facilement se déplacer dans les dossiers, revenir à la racine, ...)
  • On peut sélectionner plusieurs fichiers ou dossiers, les renommer, les supprimer, les copier, les coller,
  • Démarrer un nouveau kernel

En conclusion, c'est super simple et pratique.

II.3 Nouvelle façon d'intégrer des extensions¶

On pouvait déjà ajouter des extensions dans Jupyter Notebook

L'ajout d'extensions est encore plus au coeur de Jupyter Lab.

Fundamentally, JupyterLab is designed as an extensible environment.

Les extensions sont des paquets npm à installer.

Beaucoup aiment, ou même ont besoin, des extensions dans Jupyter notebook.

Sachez que l'ajout d'extensions est encore plus au coeur de Jupyter Lab, comme le prouve cette citation de la doc de Jupyter Lab (Fondamentallement, Jupyter Lab a été pensé en tant qu'environnement extensible). Apparemment, certaines parties de JL sont en fait de simples extensions, dans le sens où elles ne diffèrent pas des extensions non-officielles que n'importe qui ici peut proposer et ajouter.

Les extensions sont des paquets npm à installer (je mets là le lien vers npmjs, pour y trouver celles avec le label "jupyter-extension"). On y trouve un beau panaché de tout ce qui est possible.

Installation par ligne de commande

jupyter labextension install ...
pip install ...  # potentiellement
jupyter serverextension enable --sys-prefix ...  # potentiellement

L'installation d'une extension peut se faire en ligne de commande.

C'est indiqué dans les README des projets, mais, en général, ça se résume en un jupyter labextension install ... + un potentiel pip install ... et un jupyter serverextension enable --sys-prefix ....

Installation via un panneau latéral (expérimental)¶

Il existe aussi un manager d'extensions expérimental, qu'on peut mettre en route à partir des paramètres, dans la barre de menu (settings). Ce manager apparaît alors dans le panneau latéral.

Il nous donne accès aux extensions déjà installées, pour les désinstaller ou les désactiver.

Commandes¶

Il y a aussi la possibilité de voir les commandes, et même de faire des recherches (ça peut être utile pour retrouver les raccourcis qu'on veut ; même si on ne peut pas faire une recherche sur le raccourci).

Le format .ipynb¶

Le format ipynb est écrit en JSON format

In [1]:
#Utilisation d'objet Python pour l'affichage
from IPython.display import Image
img = Image("images/logo_collage.png")
img
Out[1]:
In [46]:
from IPython.display import Audio
song = Audio("./data/001_Debutant_CD1.mp3")
song
Out[46]:
Your browser does not support the audio element.
In [47]:
print(song._repr_html_()[:200])
                <audio controls="controls" >
                    <source src="data:audio/mpeg;base64,SUQzAwAAAAAhdlRQRTIAAAAOAAAATWljaGVsIFRob21hc1RZRVIAAAAFAAAAMjAwN1RSQ0sAAAADAAAAMDFUUFVCAAAAHgAAAE
In [2]:
from IPython.display import YouTubeVideo
YouTubeVideo("8uWRVh58KdQ")
Out[2]:
In [49]:
%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt
 
x = np.linspace(0.1, 20, 200)
fig, axe = plt.subplots(figsize=(12, 8))
axe.plot(x, np.sin(x)/x)
Out[49]:
[<matplotlib.lines.Line2D at 0x7f2c2e3ec470>]

Quelques différences avec Jupyter¶

  • glisser-déposer pour réorganiser les cellules d’un notebook et les copier entre les notebooks.
  • l'affichage un moteur de rendu plus récent.
  • exécution des blocs de code de manière interactive à partir de fichiers texte (.py, .R, .md, .tex, etc.) ;
  • associer une console de code à un kernel de notebook pour explorer le code de manière interactive sans encombrer le notebook avec un travail temporaire ;
  • le tout en un, editeur JSON, console d'administration, composant web, notebooks un IDE scientifique intégéré avec une logique web
  • modifier les formats de fichiers populaires avec un aperçu en direct, tel que Markdown, JSON, CSV, Vega, VegaLite, et plus encore.

Analyse de donnée: Pandas¶

l’utilisation de la librairie Pandas rend la lecture de certains formats, le regroupement de données et quelques traitements statistiques trés simples.

In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_excel('data/stock.xlsx')
df.dtypes
Out[1]:
VIN              object
NUM ORDRE       float64
CODE             object
MODEL            object
ETAT             object
ARRIVAGE         object
LOCALISATION     object
COULEUR          object
dtype: object
In [6]:
df.fillna(0)
Out[6]:
VIN NUM ORDRE CODE MODEL ETAT ARRIVAGE LOCALISATION COULEUR
1 Z226722 7090339.0 0A02 R1200GS ADV 0 0 0 RACING RED MATT
2 Z721037 8430547.0 0J11 R NINET PURE PRODUIT PROTOTYPE 0 GRIS ALUMINUM
3 Z735434 8430548.0 0J21 R NINET RACER 0 PROTOTYPE SHOW-ROOM BLANC
4 Z594138 8430604.0 0B07 F800GS MANQUE BATTERIE ARR 21 SHOW-ROOM NOIR
5 Z257806 8430665.0 0A03 R1200RT PRODUIT ARR 21 0 CARBON BLACK
6 Z623435 8430759.0 0A51 R1200GS PRODUIT ARR 22 SHOW-ROOM BLANC
7 Z626789 8430815.0 0A51 R1200GS MÜ PRODUIT ARR 14 SHOW-ROOM BLEU METT
8 Z629614 8430893.0 0A51 R1200GS PRODUIT ARR 17 SHOW-ROOM NOIR
9 Z873235 8430614.0 0J41 RNINE T URBAN G/S EN COURS D'HOMOLOGATION 0 SHOW-ROOM BLANC
10 Z635340 7089031.0 0A51 R1200GS PRODUCTION JUILLET ARR 14 0 ICED CHOCOLATE METALLIC
11 Z557450 7089001.0 0C04 C650SPORT PRODUCTION JUILLET ARR 14 CACHE NOIR
12 Z557447 7089000.0 0C04 C650SPORT PRODUCTION JUILLET ARR 14 0 NOIR
13 Z557427 7089002.0 0C04 C650SPORT PRODUCTION JUILLET ARR 14 0 ORANGE
14 Z759338 7089033.0 0D52 S1000R 0 ARR 14 0 N0Y/CATALANO GREY
15 R834415 7090937.0 0G01 G310R PROD JUILLET 0 H/D BLANC (///M)
16 R834646 8430470.0 0G01 G310R PROD JUILLET 0 0 BLANC (///M)
17 R834416 7090938.0 0G01 G310R PROD JUILLET 0 0 BLANC (///M)
18 0 7089076.0 0A51 R1200GS PRODUCTION AOUT 0 0 N1S/ICED CHOCOLATE METAL
19 0 0.0 0C05 C650GT PRODUCTION AOUT 0 0 N0M OCEAN BLEU METAL
20 Z638367 7089075.0 0A51 R1200GS PRODUCTION AOUT ARR 13 0 N1S/ICED CHOCOLATE METAL
21 R839794 7089037.0 0G01 G310R PROD JUILLET ARR 13 0 BLANC (///M)
22 R839793 7089038.0 0G01 G310R PROD JUILLET ARR 13 0 BLANC (///M)
23 Z927520 7089136.0 0A02 R1200GS ADV PRODUCTION SEPTEMBRE ARR 15 0 N1F/LIGHT WHITE/CORDOBA BLEU
24 Z639464 7089151.0 0A51 R1200GS PRODUCTION SEPTEMBRE ARR 15 0 BLEU METAL
25 Z639465 7089152.0 0A51 R1200GS PRODUCTION SEPTEMBRE ARR 15 0 BLEU METAL
26 Z639827 7089153.0 0A51 R1200GS PRODUCTION SEPTEMBRE ARR 15 0 NOIR ORAGE METAL
27 Z661918 7089149.0 0B55 F800GS ADV PRODUCTION SEPTEMBRE ARR 15 0 RACING BLUE METAL
28 Z557842 7089131.0 0C04 C650SPORT PRODUCTION SEPTEMBRE ARR 15 0 JAUNE METAL
29 Z557934 7089132.0 0C04 C650SPORT PRODUCTION SEPTEMBRE ARR 15 0 NOIR ORAGE METAL
30 Z558120 7089133.0 0C04 C650SPORT PRODUCTION SEPTEMBRE ARR 15 0 NOIR ORAGE METAL
... ... ... ... ... ... ... ... ...
84 0 7089781.0 0F02 K1600GTL PRODUCTION JANVIER 0 0 BLUE PLANET METALLIC/ALLU
85 0 7089782.0 0F02 K1600GTL PRODUCTION JANVIER 0 0 BLANC
86 0 7089783.0 0F02 K1600GTL PRODUCTION JANVIER 0 0 GRIS ECLAIR METAL
87 0 7089784.0 0F02 K1600GTL PRODUCTION JANVIER 0 0 EBENE METAL
88 0 7089921.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC
89 0 7089922.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC
90 0 7089923.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC
91 0 7089924.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC
92 0 7089925.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC
93 0 7089926.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC
94 0 7089927.0 0A02 R1200GS ADV PRODUCTION FEVRIER 0 0 LIGHT WHITE/CORDOBA BLUE
95 0 7089928.0 0A02 R1200GS ADV PRODUCTION FEVRIER 0 0 LIGHT WHITE/CORDOBA BLUE
96 0 7089929.0 0A51 R1200GS PRODUCTION FEVRIER 0 0 NOIR ORAGE METAL
97 0 7089919.0 0C05 C650GT PRODUCTION FEVRIER 0 0 OCEAN BLUE MATT
98 0 7089918.0 0C04 C650SPORT PRODUCTION FEVRIER 0 0 BLANC
99 0 7089917.0 0C04 C650SPORT PRODUCTION FEVRIER 0 0 BLANC
100 0 7089920.0 0D03 S1000XR PRODUCTION FEVRIER 0 0 RACING RED
101 0 7089957.0 0G02 G310GS PRODUCTION FEVRIER 0 0 NA5 ROUGE RACING
102 0 7089958.0 0G02 G310GS PRODUCTION FEVRIER 0 0 NA5 ROUGE RACING
103 0 7089959.0 0G02 G310GS PRODUCTION FEVRIER 0 0 NA5 ROUGE RACING
104 0 7089960.0 0G02 G310GS PRODUCTION FEVRIER 0 0 COSMIC BLACK
105 0 7089961.0 0G02 G310GS PRODUCTION FEVRIER 0 0 COSMIC BLACK
106 0 7089962.0 0G02 G310GS PRODUCTION FEVRIER 0 0 COSMIC BLACK
107 0 7089963.0 0G02 G310GS PRODUCTION FEVRIER 0 0 COSMIC BLACK
108 0 7089964.0 0G02 G310GS PRODUCTION FEVRIER 0 0 COSMIC BLACK
109 0 7089965.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC
110 0 7089966.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC
111 0 7089967.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC
112 0 7089968.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC
113 0 7089969.0 0G02 G310GS PRODUCTION FEVRIER 0 0 N1D PEARL WHITE METALLIC

113 rows × 8 columns

Pandas charger un fichier csv¶

https://github.com/shantnu/Intro-to-Pandas

In [55]:
%matplotlib inline
data = pd.read_csv("./example/hubble_data.csv")
data.head()
Out[55]:
distance recession_velocity
0 0.032 170
1 0.034 290
2 0.214 -130
3 0.263 -70
4 0.275 -185
In [56]:
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 24 entries, 0 to 23
Data columns (total 2 columns):
distance              24 non-null float64
recession_velocity    24 non-null int64
dtypes: float64(1), int64(1)
memory usage: 464.0 bytes
In [57]:
headers = ["dist","rec_vel"]
data_no_headers = pd.read_csv("./example/hubble_data_no_headers.csv", names = headers)
data_no_headers.head()
Out[57]:
dist rec_vel
0 0.032 170
1 0.034 290
2 0.214 -130
3 0.263 -70
4 0.275 -185

Selectionné d'une colonne

In [59]:
data_no_headers["dist"].tail(4)
Out[59]:
20    2.0
21    2.0
22    2.0
23    2.0
Name: dist, dtype: float64

Jouer avec les index

In [60]:
data.set_index("distance", inplace= True)
data.head()
Out[60]:
recession_velocity
distance
0.032 170
0.034 290
0.214 -130
0.263 -70
0.275 -185
In [61]:
data.plot()
plt.show()

Calcul formel¶

In [35]:
from sympy import *
# Initialize notebook printing
init_printing()
integrate(x**2 * exp(x) * cos(x), x)
Out[35]:
$$\frac{x^{2} e^{x}}{2} \sin{\left (x \right )} + \frac{x^{2} e^{x}}{2} \cos{\left (x \right )} - x e^{x} \sin{\left (x \right )} + \frac{e^{x}}{2} \sin{\left (x \right )} - \frac{e^{x}}{2} \cos{\left (x \right )}$$

IPywidgets¶

IPywidgets : pour rajouter des boutons, des cases à cocher, ...

\$ pip install ipywidgets

\$ jupyter nbextension enable --py --sys-prefix widgetsnbextension

IPywidgets¶

Les IPywidgets sont des éléments graphiques permettant de piloter des paramétres de fonctions

  • des zones de saisies
  • des cases à cocher
  • des curseurs
  • des menus déroulants

La clé réside dans le module interact

In [2]:
### Premier exemple
from ipywidgets import interact
from ipywidgets import *
from IPython.display import display
w = IntSlider()
display(w, w)
In [5]:
interact(f, x='text')
Out[5]:
<function __main__.f(x)>
In [3]:
### Deuxième exemple
def f(x):
    print(x)
interact(f, x=10)
Out[3]:
<function __main__.f(x)>
In [4]:
### valeur booléen
interact(f, x=True) #Or False
Out[4]:
<function __main__.f(x)>
In [3]:
import numpy as np
import matplotlib.pyplot as plt
from ipywidgets import interact

t = np.arange(0.0, 1.0, 0.01)
x = np.linspace(0, 2*np.pi, 100)

def pltsin(f):
    plt.plot(x, np.sin(2*np.pi*t*f))
    plt.show()
interact(pltsin, f=(1, 10, 0.1))
t
Out[3]:
array([0.  , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1 ,
       0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2 , 0.21,
       0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3 , 0.31, 0.32,
       0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4 , 0.41, 0.42, 0.43,
       0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5 , 0.51, 0.52, 0.53, 0.54,
       0.55, 0.56, 0.57, 0.58, 0.59, 0.6 , 0.61, 0.62, 0.63, 0.64, 0.65,
       0.66, 0.67, 0.68, 0.69, 0.7 , 0.71, 0.72, 0.73, 0.74, 0.75, 0.76,
       0.77, 0.78, 0.79, 0.8 , 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87,
       0.88, 0.89, 0.9 , 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98,
       0.99])

Conversion et publication¶

L'outil nbconvert est un outil en ligne de commandes qui permet de convertir les fichiers .ipynb dans un des formats supportés: HTML, PDF via LaTeX, diapositives(reveal.js), script, markdown, ReStructured Text.

jupyter nbconvert --to pdf votre_fichier.ipynb

jupyter nbconvert --to html --template base votre_fichier.ipynb

jupyter nbconvert slides.ipynb --to slides --post serve --ServePostProcessor.reveal_cdn="http://cdn.jsdelivr.net/reveal.js/2.5.0"

nbviewer Publication sur internet (Un livre écrit totalement avec Jupyter)¶

Coopération et partage¶

Avec d'autres utilisateurs de jupyter:

  • On peut facilement partager le notebook lui meme
    • par email
    • par répertoire partagé
    • dans le cloud
    • via un VCS privé ou github/bitbucket
  • Ou utiliser JupyterHub (https://github.com/jupyterhub/jupyterhub) dans une origanisation

Je vais m'arrêter là dessus, mais il y aurait encore beaucoup de choses à dire. Parmi les choses que je n'ai pas encore vraiment pris le temps d'essayer, mais que j'avais envie de citer, il y a :

  • bqplot : pour faire des graphiques interactifs,
  • jupyterhub : pour donner accès à des serveurs de notebooks à des équipes (étudiants, chercheurs, collègues, ...)
  • voilà : pour transformer vos notebooks en application web
  • et sans doute encore d'autres que j'oublie.

Merci de votre attention¶

Questions ? Remarques ?¶